"""
创建角色：名字、性别、血量、装备
创建房间：
角色可以加入房间
房间内的人可以互打，互打为每0.5秒进行一次
房间上限2人
战斗:
装备-防弹衣
血量默认100
掉血在范围内随机
角色正常攻击伤害为8 ~ 12滴血
有护盾受到攻击减3 ~ 5滴血
捡到血包回复5滴血
"""

import random
import time


class Character(object):
    # 角色可以加入房间，可以攻击
    def __init__(self, name, sex, blood=100):
        self.name = name
        self.sex = sex
        self.blood = blood
        self.room = False
        self.shield = False

    def join_room(self, room_name):
        # 加入房间，如果已经加入房间或者房间人数已满，不允许加入
        if (not self.room) and room_name.n < 2:
            self.room = True
            # 将该角色记录到房间成员列表中
            room_name.member.append(self)
            room_name.n += 1
            print(f"{self.name}已成功进入房间{room_name.name}！")
            print(f"房间人数：{room_name.n}")
            room_name.check_member()
            return True
        elif self.room or room_name.n == 2:
            print("房间加入失败！您已经加入某个房间或该房间人数已满！")
            return False

    def attack(self, other):
        # 角色可能随机获得护盾或血包，0代表获得
        shield = random.randint(0, 1)
        blood_pack = random.randint(0, 3)
        if shield == 0:
            print(f"{self.name}获得护盾！")
            self.shield = True
        if blood_pack == 0:
            print(f"{self.name}获得血包！血量+5！")
            self.blood += 5
            print(f"{self.name}现在的血量：{self.blood}")
        # 等待0.5s，开始攻击
        time.sleep(0.5)
        # 对方有护盾的情况
        if other.shield:
            other.blood -= random.randint(3, 5)
            print(f"{other.name}受到攻击！现在的血量：{other.blood}")
        # 对方没有护盾的情况
        else:
            other.blood -= random.randint(8, 12)
            print(f"{other.name}受到攻击！现在的血量：{other.blood}")


class Room(object):
    # 房间可以自定义名字，记录进入房间的角色
    def __init__(self, room_name, n=0):
        self.name = room_name
        self.member = []
        self.n = n

    def check_member(self):
        # 房间人数满则自动开始互打
        if self.n == 2:
            print("战斗开始！")
            self.fight()
        else:
            return False

    def fight(self):
        # 先进入房间的角色先攻击，相互攻击，直到有一方血量低于0，战斗结束
        while True:
            # 玩家0攻击
            self.member[0].attack(self.member[1])
            # 血量小于等于0游戏结束
            if self.member[1].blood <= 0:
                print(f"KO！{self.member[0].name} Win！")
                break
            # 玩家1攻击
            self.member[1].attack(self.member[0])
            if self.member[0].blood <= 0:
                print(f"KO！{self.member[1].name} Win！")
                break
            print("-"*35)

def menu():
    """
    游戏菜单
    :return:
    """
    print("*欢迎来到双人对战*".center(35, '-'))
    print(f"1. 创建玩家\n2. 创建房间\n3. 加入房间\n4. 退出游戏")
    info = input("请输入您的选择(输入选项编号)：")
    # 创建玩家
    if info == '1':
        print("正在创建角色".center(35, '-'))
        name = input("请输入您想创建的角色名：")
        sex = input("请输入您想创建的角色性别（女/男）：")
        if sex == '女' or sex == '男':
            characters[name] = Character(name, sex)
            print(f"{name} 角色成功创建".center(35, '-'))
        else:
            print("请输入有效的性别！".center(35, '-'))
    # 创建房间
    elif info == '2':
        print("正在创建房间".center(35, '-'))
        room_name = input("请输入房间名：")
        rooms[room_name] = Room(room_name)
        print(f"{room_name} 房间成功创建".center(35, '-'))
    # 加入房间
    elif info == '3':
        # 显示目前已创建的房间名
        print("已创建的房间".center(35, '-'))
        for key in rooms:
            print(key)
        # 显示目前已创建的角色名
        print("已创建的角色".center(35, '-'))
        for key in characters:
            print(key)
        join_character, room1 = input("请输入想要加入的角色名和房间名（空格分隔）：").split()
        characters[join_character].join_room(rooms[room1])

    # 退出游戏
    elif info == '4':
        print("已退出！")
        global exit_flag
        exit_flag = True
        exit()
    else:
        print("请根据提示输入有效的信息！")

# 字典存放角色实例信息和房间实例信息
rooms = {}
characters = {}
exit_flag = False
while True:
    menu()
    if exit_flag:
        break